package paidaxing.blog.post.mapper;

import paidaxing.blog.post.entity.PostTags;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 文章标签关联数据访问接口
 */
@Mapper
public interface PostTagsDao {

    /**
     * 根据ID查询文章标签关联
     * 
     * @param id 关联ID
     * @return 文章标签关联实体
     */
    PostTags queryById(Long id);

    /**
     * 分页查询文章标签关联列表
     * 
     * @param postTags 查询条件
     * @param pageable 分页对象
     * @return 文章标签关联列表
     */
    List<PostTags> queryAllByLimit(PostTags postTags, @Param("pageable") org.springframework.data.domain.Pageable pageable);

    /**
     * 统计文章标签关联总数
     * 
     * @param postTags 查询条件
     * @return 总数
     */
    long count(PostTags postTags);

    /**
     * 插入文章标签关联
     * 
     * @param postTags 文章标签关联实体
     * @return 影响行数
     */
    int insert(PostTags postTags);

    /**
     * 批量插入文章标签关联
     * 
     * @param entities 文章标签关联列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<PostTags> entities);

    /**
     * 批量插入或更新文章标签关联
     * 
     * @param entities 文章标签关联列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<PostTags> entities);

    /**
     * 更新文章标签关联
     * 
     * @param postTags 文章标签关联实体
     * @return 影响行数
     */
    int update(PostTags postTags);

    /**
     * 根据ID删除文章标签关联
     * 
     * @param id 关联ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 根据文章ID删除关联关系
     * 
     * @param postId 文章ID
     * @return 影响行数
     */
    int deleteByPostId(Long postId);
    
    /**
     * 根据标签ID列表查询文章ID列表
     * 
     * @param tagIds 标签ID列表
     * @return 文章ID列表
     */
    List<Long> selectPostIdsByTagIds(@Param("tagIds") List<Long> tagIds);
}